import sqliteSeesion from '@/sqlite_services/seesion.js';
import sqliteMsg from '@/sqlite_services/msg.js';
export default {
    state: {
        sessionList:[]
    },
    mutations: {
        setSeesion(state, data) {
			let count = 0
			data.forEach(item => {
				if(!item.disturbing){
					count += item.unread_count
				}
			});
			this.dispatch('updateChatBadge',{ type: 'set', count })
			state.sessionList = data
		},
		// 更新 sessionList 中的特定元素
		updateSessionById(state, { chat_id, data }) {
			const index = state.sessionList.findIndex(session => session.chat_id == chat_id);
			console.log(index);
			if (index !== -1) {
				for (let key in data) {
				  if (data[key] != state.sessionList[index][key]) {
				    Vue.set(state.sessionList[index], key, data[key]);
				  }
				}
			}
		},
		// 添加一个新的session到列表的最上方
		addSession(state, session) {
		    state.sessionList.unshift(session);
		},
		// 删除一个session
		deleteSessionById(state, chat_id) {
			const index = state.sessionList.findIndex(session => session.chat_id == chat_id);
			if (index !== -1) {
				//删除角标
				this.dispatch('updateChatBadge',{ type: 'sub', count: state.sessionList[index].unread_count })
				state.sessionList.splice(index, 1);
			}
		},
		//更新到最前面
		moveSessionToFront(state, session) {
			const index = state.sessionList.findIndex(s => s.chat_id == session.chat_id);
			if (index !== -1) {
				state.sessionList.unshift(state.sessionList.splice(index, 1)[0])
			}
		},
    },
	getters: {
	    getSessionById: (state) => (chat_id) => {
	        return state.sessionList.find(session => session.chat_id == chat_id);
	    }
	},
    actions: {
		//更新会话
		async updateSession({ commit }, { chat_id, data }) {
			console.log(data);
			commit('updateSessionById', { chat_id, data });
			await sqliteSeesion.editSesstion(chat_id,data)
		},
		//用户删除消息，更新会话最后一条
		async delMsgSession({ commit,dispatch,getters }, { chat_id,msg_ids,chat_type }) {
			const session = getters.getSessionById(chat_id);;
			if(session){
				if(msg_ids.includes(session.last_msg_id)){
					try{
						let lastmsg = await sqliteMsg.getLastMsg({
							chat_type,
							uuid:chat_id
						})
						if(lastmsg.length){
							dispatch('updateSession',{
								chat_id,
								data:{
									last_msg_type: lastmsg[0].msg_type,
									last_msg: lastmsg[0].content_text, // 假设message.content是消息内容
									last_msg_id: lastmsg[0].msg_id || '', // 假设message.id是消息ID
									last_time: lastmsg[0].create_time.toString().length == 10?lastmsg[0].create_time*1000:lastmsg[0].create_time, // 假设data.timestamp是消息时间戳，否则使用当前时间
								}
							})
						}else{
							dispatch('updateSession',{
								chat_id,
								data:{
									last_msg_type: '',
									last_msg: '', // 假设message.content是消息内容
									last_msg_id: '', // 假设message.id是消息ID
									last_time: '', // 假设data.timestamp是消息时间戳，否则使用当前时间
									unread_count:0
								}
							})
						}
					}catch(e){
						//TODO handle the exception
					}
				}
			}
		},
		//用户修改消息，更新会话
		async editMsgSession({ commit,dispatch,getters }, { chat_id,msg_id,content_text }) {
			console.log(chat_id,msg_id,content_text);
			const session = getters.getSessionById(chat_id);
			console.log(session);
			if(session){
				if(session.last_msg_id == msg_id){
					dispatch('updateSession',{
						chat_id,
						data:{
							last_msg: JSON.stringify(content_text) , // 假设message.content是消息内容
						}
					})
				}
			}
		},
		// 在action中调用mutation来删除session
		async removeSession({ commit }, chat_id) {
			commit('deleteSessionById', chat_id);
			await sqliteSeesion.delSesstion(chat_id)
		},
		//来新消息
		async handleNewMessage({ commit,getters, state, rootState,dispatch }, { chat_id, data, unreadCount}) {
			// console.log(data);
			// 查找会话
			const session = getters.getSessionById(chat_id);
			const activeChatUuid = rootState.chat.chatInfo && rootState.chat.chatInfo.uuid || ''; // 访问根级状态的chatInfo
			const unreadCountDelta = activeChatUuid == chat_id ? 0 : unreadCount;
			//更新tabbar数量,如果免打扰不增加总数
			if(!data.disturbing){
				dispatch('updateChatBadge',{ type: 'add', count: data.disturbing?0:unreadCountDelta })
			}
			if (session) {
				// 如果会话已存在，更新指定字段
				const updatedSession = {
					...session,
					last_msg_type: data.last_msg_type,
					last_msg: data.last_msg, // 假设message.content是消息内容
					last_msg_id: data.last_msg_id || '', // 假设message.id是消息ID
					last_time: data.last_time || Date.now(), // 假设data.timestamp是消息时间戳，否则使用当前时间
					unread_count: session.unread_count + unreadCountDelta, // 根据消息是否为自己发送决定是否增加未读数
					at: data.at?data.at:session.at // 根据是否被@更新at字段
				};
				// 找到当前会话的位置并替换为更新后的会话
				const index = state.sessionList.findIndex(s => s.chat_id == chat_id);
				commit('updateSessionById', { chat_id, data: updatedSession });
				commit('moveSessionToFront', updatedSession); // 移动会话到首位
				await sqliteSeesion.editSesstion(chat_id, updatedSession); // 更新数据库
			} else {
				// 如果不存在，创建新会话并添加到首位
				const newSession = {
					conversation_id: data.conversation_id || 0, // 需要从message或外部获取
					chat_id: data.chat_id,
					chat_name: data.chat_name, // 同上，初始化或从message中提取
					nick_name: data.nick_name, // 同上，初始化或从message中提取
					chat_face: data.chat_face, // 同上
					chat_member_type: data.chat_member_type||'', // 同上
					chat_type: data.chat_type, // 假设message.chat_type定义了聊天类型
					last_msg: data.last_msg,
					last_msg_id: data.last_msg_id||'',
					last_time: (data.last_time && data.last_time.toString().length == 10?data.last_time*1000:data.last_time) || Date.now(),
					is_top: 0,
					tags:data.tags || '',
					tags_font_color:data.tags_font_color || '', 
					disturbing: data.disturbing,
					last_msg_type: data.last_msg_type || '', // 假设message.type定义了消息类型
					at: data.at?data.at:0,//证明如果本次消息有人@你,则更新一下,如果本次没人@你，继续使用上次的@
					unread_count: unreadCountDelta
				};
				console.log(newSession);
				commit('addSession', newSession);
				await sqliteSeesion.replaceSesstion(newSession); // 添加到数据库
			}
		},
		//清空会话未读和at
		clearUnread({state,dispatch}, chat_id) {
			let index = state.sessionList.findIndex(it => it.chat_id == chat_id)
			if (index != -1) {
				let sessionItem = state.sessionList[index]
				if(!sessionItem.disturbing){
					dispatch('updateChatBadge',{ type: 'sub', count: state.sessionList[index].unread_count })
				}
				dispatch('updateSession',{ chat_id, data: {
					unread_count:0,
					at:0
				} })
			}
		},
    }
};